package com.platform.usercenter.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.platform.usercenter.domain.dto.SysMenuPermissionDTO;
import com.platform.usercenter.service.TreeAdapter;
import lombok.Data;

import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Description: 菜单树
 * @Author: wcs
 * @Date: 2024-11-14 14:03
 **/
@Data
public class SysMenuTreeDTO implements TreeAdapter {

    /**
     * 菜单ID
     */
    private Long menuId;

    private String endPoint;

    /**
     * 应用ID
     */
    private Long appSceneId;

    /** 应用场景名称 */
    private String sceneName;
    /**
     * 菜单名称
     */
    private String menuName;

    /**
     * 父菜单名称
     */
    private String parentName;

    /**
     * 父菜单ID
     */
    private Long parentId;

    /**
     * 显示顺序
     */
    private Integer orderNum;

    /**
     * 路由地址
     */
    private String path;

    /**
     * 组件路径
     */
    private String component;

    /**
     * 路由参数
     */
    private String query;

    /**
     * 是否为外链（0是 1否）
     */
    private String isFrame;

    /**
     * 是否缓存（0 缓存 1 不缓存）
     */
    private String isCache;

    /**
     * 类型（M目录 C菜单 F按钮）
     */
    private String menuType;

    /**
     * 显示状态（0显示 1隐藏）
     */
    private String visible;

    /**
     * 菜单状态（0正常 1停用）
     */
    private String status;

    /**
     * 权限字符串
     */
    private String perms;

    /**
     * 菜单图标
     */
    private String icon;

    private String systemType;

    /**
     * 菜单图标上传路径
     */
    private String iconUrl;
    /**
     * 是否删除(Y,N)
     */
    private String isDelete;

    /**
     * 删除人
     */
    private String deleteBy;

    /**
     * 删除时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date deleteTime;

    /**
     * 创建者
     */
    private String createBy;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 更新者
     */
    private String updateBy;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 备注
     */
    private String remark;
    /**
     * 菜单标记 1-系统 2-游客 3-通用
     */
    private String menuFlag;

    /**
     * 菜单权限
     */
    private List<SysMenuPermissionDTO> menuPermissionDTOS;

    private List<SysMenuTreeDTO> children;

    @Override
    public Long getTreeCurrentId() {
        return menuId;
    }

    @Override
    public Long getTreeParentId() {
        return parentId;
    }

    @Override
    public <T> void setTreeChildren(List<TreeAdapter> list, Class<T> clazz) {
        if (clazz.equals(SysMenuTreeDTO.class)) {
            List<SysMenuTreeDTO> collect = list.stream().map(SysMenuTreeDTO.class::cast).collect(Collectors.toList());
            setChildren(collect);
        }
    }
}
